package com.bbva.kyfb.kyfbdto.firmas.fachada.interfaces.v01;

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import org.springframework.web.bind.annotation.RequestBody;

import com.bbva.jee.arq.spring.core.httpService.HttpClient;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.ComponentsForSignRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.DeletedFilesResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponentDetail;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponentRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoComponentsResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileAuditRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileAuditResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileCompaniesRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileCompaniesResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileDetailedRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileFirResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileMiFID;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileMiFIDRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFileRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoFilteredSignersRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoReferenceRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoSendNotificationRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoSendNotificationResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoSignersRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoToDeleteRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoUpdateNumeroAleatorioRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.InfoUpdateNumeroAleatorioResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.NewFileRequest;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.SignedComponentsResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.SignerUsersResponse;
import com.bbva.kyfb.kyfbdto.firmas.fachada.v01.SignerUsersResponseRealized;



/**
 * The Interface ISrvFirmasV01.
 */
@HttpClient(serviceName="servicioFirmasHttp")
@Path("/v01/ServicioFirmas/")
public interface ISrvFirmasV01 
{
    
    /**
     * Gets the componentes pendientes referencia.
     *
     * @param info the info
     * @return the componentes pendientes referencia
     */
    @POST
    @Path("/firmas/infoFileFir/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoFileFirResponse getComponentesPendientesReferencia(@RequestBody InfoFileRequest info);
	

    /**
     * Gets the usuarios firma realizada.
     *
     * @param info the info
     * @return the usuarios firma realizada
     */
    @POST
    @Path("/firmas/signedUserR/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public SignerUsersResponseRealized getUsuariosFirmaRealizada(@RequestBody InfoSignersRequest info);

    /**
     * Gets the usuarios firma pendiente.
     *
     * @param info the info
     * @return the usuarios firma pendiente
     */
    @POST
    @Path("/firmas/signerUser/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public SignerUsersResponse getUsuariosFirmaPendiente (@RequestBody InfoFilteredSignersRequest info);
	
    /**
     * Gets the componentes pendientes referencia usuario.
     *
     * @param info the info
     * @return the componentes pendientes referencia usuario
     */
    @POST
    @Path("/firmas/infoFileRefUs/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoFileFirResponse getComponentesPendientesReferenciaUsuario(@RequestBody InfoFileDetailedRequest info);

    /**
     * Gets the auditoria componente pendiente.
     *
     * @param info the info
     * @return the auditoria componente pendiente
     */
    @POST
    @Path("/firmas/auditoria/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoFileAuditResponse getAuditoriaComponentePendiente(@RequestBody InfoFileAuditRequest info);

    /**
     * Gets the lista componentes firmables.
     *
     * @param info the info
     * @return the lista componentes firmables
     */
    @POST
    @Path("/firmas/infoCompFir/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoComponentsResponse getListaComponentesFirmables (@RequestBody InfoReferenceRequest info);
	
    /**
     * Delete componente pendiente.
     *
     * @param info the info
     * @return the deleted files response
     */
    @POST
    @Path("/firmas/deleteFile/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public DeletedFilesResponse  deleteComponentePendiente (@RequestBody InfoToDeleteRequest info);
	
    /**
     * Creates the nuevo componente.
     *
     * @param newFile the new file
     * @return the string
     */
    @POST
    @Path("/firmas/createComp/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public String createNuevoComponente (@RequestBody NewFileRequest newFile);

    /**
     * Put firma componente.
     *
     * @param components the components
     * @return the signed components response
     */
    @POST
    @Path("/firmas/putFir/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public SignedComponentsResponse putFirmaComponente(@RequestBody ComponentsForSignRequest components);
    
    /**
     * Gets the detalle componente.
     *
     * @param info the info
     * @return the detalle componente
     */
    @POST
    @Path("/firmas/fileDetail/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoComponentDetail getDetalleComponente(@RequestBody InfoComponentRequest info);
    
    /**
     * Gets the componente tipo mifid.
     *
     * @param info the info
     * @return the componente tipo mifid
     */
    @POST
    @Path("/firmas/fileMifidComponent/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoFileMiFID getComponenteTipoMifid(@RequestBody InfoFileMiFIDRequest  info);
    
    /**
     * Gets the consulta empresas asociadas.
     *
     * @param info the info
     * @return the consulta empresas asociadas
     */
    @POST
    @Path("/firmas/empAsoc/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoFileCompaniesResponse getConsultaEmpresasAsociadas(@RequestBody InfoFileCompaniesRequest info);
    
    /**
     * Gets the id de sesion del pau por sms.
     *
     * @param info the info
     * @return the componente de notificacion
     */
    @POST
    @Path("/firmas/sendNotif/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoSendNotificationResponse sendNotificacion(@RequestBody InfoSendNotificationRequest info);
 
    /**
     * Metodo que realiza la actualizacion (update) del numero aleatorio
     * 
     * @param info la entrada con el listado de idOrdenes y la info del usuario necesaria
     * @return InfoUpdateNumeroAleatorioResponse la respuesta del metodo (codError y sNumeroAleatorio)
     */
    @POST
    @Path("/firmas/updateNAleatorio/")
    @Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, MediaType.TEXT_PLAIN })
	public InfoUpdateNumeroAleatorioResponse updateNumeroAleatorioComponentesUsuario(@RequestBody InfoUpdateNumeroAleatorioRequest info);
    
}
